﻿#pragma once
#include <string>
#include <random>
#include <sstream>
#include <chrono>

class User {
public:
    /**
     * @brief 生成唯一序列号
     * @param prefix 序列号前缀，默认为 "SN"
     * @param length 序列号长度（不包括前缀），默认为 10
     * @return 生成的序列号字符串
     */
    static std::string generate_serial(const std::string& prefix = "SN", int length = 10) {
        // 使用当前时间戳和高精度时钟作为随机种子
        auto now = std::chrono::system_clock::now();
        auto seed = now.time_since_epoch().count();

        // 使用随机数生成器生成 UUID 风格的字符串
        std::mt19937 gen(seed);
        std::uniform_int_distribution<> dis(0, 15);

        std::stringstream ss;
        for (int i = 0; i < length; ++i) {
            ss << std::hex << dis(gen);
        }

        // 转换为大写并拼接前缀
        std::string result = ss.str();
        for (auto& c : result) {
            c = toupper(c);
        }

        return prefix + result;
    }
};
